<cmdsynopsis>
<command>ostree config set</command> <arg choice="req"> --group=GROUPNAME</arg> <arg choice="req"> KEYNAME</arg> <arg choice="req">VALUE</arg>
</cmdsynopsis>
+ <cmdsynopsis>
+ <command>ostree config unset</command> <arg choice="req">SECTIONNAME.KEYNAME</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>ostree config unset</command> <arg choice="req"> --group=GROUPNAME</arg> <arg choice="req"> KEYNAME</arg>
+ </cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
- <para>
- Displays or changes a configuration setting.
- </para>
+ <itemizedlist>
+ <listitem><para>
+ <command>ostree config get</command> displays the value of
+ <arg choice="plain">KEYNAME</arg> in the group <arg choice="plain">GROUPNAME</arg>
+ (or <arg choice="plain">SECTIONNAME</arg> depending on the
+ syntax used).
+ </para></listitem>
+ <listitem><para>
+ <command>ostree config set</command> sets the value of
+ <arg choice="plain">KEYNAME</arg> in the group <arg choice="plain">GROUPNAME</arg>
+ to <arg choice="plain">VALUE</arg>.
+ </para></listitem>
+ <listitem><para>
+ <command>ostree config unset</command> removes the key
+ <arg choice="plain">KEYNAME</arg> from the group <arg choice="plain">GROUPNAME</arg>
+ so that OSTree uses the default value for it. It is not an
+ error for the specified <arg choice="plain">GROUPNAME</arg> or
+ <arg choice="plain">KEYNAME</arg> not to exist.
+ </para></listitem>
+ </itemizedlist>
</refsect1>
<refsect1>
<para><command>$ ostree config get core.mode</command></para>
<para>bare</para>
<para><command>$ ostree config set --group='remote "myremote"' url http://example.com/repo</command></para>
+ <para><command>$ ostree config unset core.lock-timeout-secs</command></para>
</refsect1>
</refentry>
g_autofree char *key = NULL;
GKeyFile *config = NULL;
- context = g_option_context_new ("(get KEY|set KEY VALUE)");
+ context = g_option_context_new ("(get KEY|set KEY VALUE|unset KEY)");
if (!ostree_option_context_parse (context, options, &argc, &argv, invocation, &repo, cancellable, error))
goto out;
g_print ("%s\n", value);
}
+ else if (!strcmp (op, "unset"))
+ {
+ g_autoptr(GError) local_error = NULL;
+ if (opt_group)
+ {
+ if (argc < 3)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Group name and key must be specified");
+ goto out;
+ }
+ section = g_strdup(opt_group);
+ key = g_strdup(argv[2]);
+ }
+ else
+ {
+ if (argc < 3)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "KEY must be specified");
+ goto out;
+ }
+ section_key = argv[2];
+ if (!split_key_string (section_key, §ion, &key, error))
+ goto out;
+ }
+
+ config = ostree_repo_copy_config (repo);
+ if (!g_key_file_remove_key (config, section, key, &local_error))
+ {
+ if (!g_error_matches (local_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND) &&
+ !g_error_matches (local_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND))
+ {
+ g_propagate_error (error, g_steal_pointer (&local_error));
+ goto out;
+ }
+ }
+
+ if (local_error == NULL && !ostree_repo_write_config (repo, config, error))
+ goto out;
+ }
else
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
. $(dirname $0)/libtest.sh
-echo '1..2'
+echo '1..3'
ostree_repo_init repo
${CMD_PREFIX} ostree remote add --repo=repo --set=xa.title=Flathub --set=xa.title-is-set=true flathub https://dl.flathub.org/repo/
assert_file_has_content repo/config "false"
assert_file_has_content repo/config "http://example.com/ostree/"
echo "ok config set"
+
+# Check that "ostree config unset" works
+${CMD_PREFIX} ostree config --repo=repo set core.lock-timeout-secs 60
+assert_file_has_content repo/config "lock-timeout-secs=60"
+${CMD_PREFIX} ostree config --repo=repo unset core.lock-timeout-secs
+assert_not_file_has_content repo/config "lock-timeout-secs="
+
+# Check that "ostree config get" errors out on the key
+if ${CMD_PREFIX} ostree config --repo=repo get core.lock-timeout-secs 2>err.txt; then
+ assert_not_reached "ostree config get should not work after unsetting a key"
+fi
+assert_file_has_content err.txt "error: Key file does not have key “lock-timeout-secs” in group “core”"
+
+# Check that it's idempotent
+${CMD_PREFIX} ostree config --repo=repo unset core.lock-timeout-secs
+assert_not_file_has_content repo/config "lock-timeout-secs="
+
+# Check that the group doesn't need to exist
+${CMD_PREFIX} ostree config --repo=repo unset --group='remote "aoeuhtns"' 'xa.title'
+
+# Check that the key doesn't need to exist
+${CMD_PREFIX} ostree config --repo=repo set --group='remote "aoeuhtns"' 'xa.title-is-set' 'false'
+${CMD_PREFIX} ostree config --repo=repo unset --group='remote "aoeuhtns"' 'xa.title'
+echo "ok config unset"